package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import misc.Enregistrement;
/**
 * Cette classe gere le chargement d'un fichier de figures
 * @author Romain POGU
 * @author Anthony MAUGENDRE
 * @version 1.0
 *
 */
public class ControlMenuItemOuvrir implements ActionListener {

	private FenetAffiche frame;

	/**
	 * Constructeur
	 * 
	 * @param frame fenetre sur laquelle le composant est affiche
	 */
	public ControlMenuItemOuvrir(FenetAffiche frame) {
		// TODO Auto-generated constructor stub
		this.frame = frame;
	}

	/**
	 * Cette Methode propose de choisir un fichier de figures a charger
	 */
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
        int ret;
		JFileChooser chooser = new JFileChooser();
		// Note: source for ExampleFileFilter can be found in FileChooserDemo,
		// under the demo/jfc directory in the Java 2 SDK, Standard Edition.
		int returnVal = chooser.showOpenDialog(frame);
		if (returnVal == JFileChooser.CANCEL_OPTION) {
			System.out.println("FILE SAVE CANCELED");
			return;
		}
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			frame.setFilePath(chooser.getCurrentDirectory() + "/"
					+ chooser.getSelectedFile().getName());
			System.out.println(frame.filePath + " OPEN!");
		}

		ObjectInputStream fluxObjLect = null;
		try {
			fluxObjLect = new ObjectInputStream(new FileInputStream(
					frame.filePath));
			try {
				System.out.println("OUVRIR");
				// TODO modifier ouverture
                Enregistrement enr= (Enregistrement)fluxObjLect.readObject();
                frame.villes = enr.getVilles();
                BarreOutils b= frame.barreOutils;
                b.setM(enr.getM());
                b.setAlpha(enr.getAlpha());
                b.setBeta(enr.getBeta());
                b.setR(enr.getR());
                b.setK(enr.getK());
                b.setIterations(enr.getIterations());
                b.labelNbVilles.setText(enr.getVilles().getNbPoints()+"");
                b.labelLongueurElastique.setText("N/A");
                ret = JOptionPane.showConfirmDialog(frame,"Voulez-vous relancer l'algorithme maintenant?","Lancer l'algorithme", 2);

                if (ret == JOptionPane.OK_OPTION) {
					frame.isReloading=true;
                    frame.lancerElastique();
                }
				else {
					frame.isReloading=false;
                    frame.villes.dessineToi(frame.zd.getGraphics());
                }

			} catch (ClassNotFoundException e1) {
                JOptionPane.showMessageDialog(frame, "Erreur a l'ouverture du fichier",
					      "Erreur",
					      JOptionPane.WARNING_MESSAGE);
				frame.filePath = null;
			} catch (NullPointerException e2) {
				JOptionPane.showMessageDialog(frame, "Erreur a l'ouverture du fichier",
					      "Erreur",
					      JOptionPane.WARNING_MESSAGE);
				frame.filePath = null;
			}
		} catch (FileNotFoundException e1) {
			JOptionPane.showMessageDialog(frame, "fichier introuvable",
				      "Erreur",
				      JOptionPane.WARNING_MESSAGE);
			frame.filePath = null;
		} catch (IOException e1) {
			JOptionPane.showMessageDialog(frame, "fichier invalide",
				      "Erreur",
				      JOptionPane.WARNING_MESSAGE);
			frame.filePath = null;
		} 
	}

}
